Elevate Software


Login Login

ProductsBulletSalesBulletSupportBulletDownloadsBulletAbout





Home » Elevate Software Blog

Icon Elevate Software Blog

Tags Showing all blog entries tagged with "Elevate Web Builder"

Elevate Web Builder 3 Progress Update for April 2019
Posted by Tim Young on Fri, Apr 26 2019

Just a quick update on Elevate Web Builder 3. I almost done with the new compiler/interpreter, and just need to implement the new external interfaces to native Delphi code (modules) over the weekend, and then I'll be starting on re-integrating the compiler/interpreter back into the new EWB 3 IDE. After that, I need to finish up some aspects of the server-side application run-time support code and then I'm done with the initial beta candidate. I'm trying like crazy to get this all completed by the middle of May.

So, just to revisit all that I've been working on:
  • EWB 3 has a new IDE, which you can see here:

    Elevate Web Builder 3 IDE Screen Shot

    You can manage any number of EWB 3 web servers directly from within the IDE, including managing all deployed content and content folders. There is no longer any distinction between the "internal server" web server built into the IDE and an "external server" web server, as far as the IDE/deployment is concerned. The only difference is that the EWB 3 internal web server is in-process as part of the IDE. But, even the internal server stores its database and content in a special AppData location. And, you will be able to migrate the settings of any web server instance to any other web server instance with a simple IDE context menu option.

    There is also a new component navigator in the IDE, and the component library has been moved to the left-hand side of the IDE. Also, all of the ancillary IDE panels can be moved into the gutters by simply double-clicking on the title bar of each panel or the special move icon on each panel's title bar.


  • EWB 3 has a new web server:

    The new web server has a lot of new features, including user/role/privilege management (including anonymous access), built-in, transparent TLS support (just need to specify the cert name you want to use), automatic authentication and session handling, remote content management, support for existing EWB web server modules (native code), and support for new, interpreted server applications.

    The new server applications rely on the new EWB 3 interpreter (see below) and can be created/compiled/deployed/debugged directly in the IDE. You run them similarly to a DLL in Delphi, in that you can specify a client application to run that will make requests to the server application and trigger any breakpoints, etc. The server applications also have support for features like encrypted payloads so that vendors can require a license key in order to permit execution, but these features will most likely be released at a later time.

    The database support has also been improved quite a bit, and uses a new REST-ful API that is easier to access for non-EWB client applications. In addition, the database support now includes the ability to echo back generated/identity columns to the client application for inserts/updates, which has been sorely missing for a while.


  • EWB 3 has a new compiler:

    The new compiler has a brand-new front-end (parsing/identifier resolution) that is much, much better at symbol/identifier resolution and doesn't have issues with odd constructs like the existing compiler. The existing compiler was created primarily as a JavaScript transpiler, and it did an okay job, but it was inadequate for emitting instructions for an interpreter (see next).

    After the conversations on the support forums about the code editor improvements, I went ahead and took a week and a half of time in April to move the parsing/tokenizing for the code editor into the source manager for the IDE. What this does is streamline the parsing/tokenizing process and remove the necessity of having both the code editor and the compiler parsing the same source (improves performance). Instead, the parsing/tokenizing is now handled once in the source manager and can be incrementally updated as the source code is changed, which makes it possible to implement the code editor improvements very soon after the initial EWB 3 release. In addition, this change allows me to expose these services in the IDE for plugins and IDE add-ons in the near future so that plugin code can response to changes in the source code, etc. This also opens up the possibility for different source parsers for JSON, HTML, etc. in the IDE with syntax highlighting. Finally, this change moves the undo/redo into the source manager, where it can track such changes for history tracking/source control (again, future feature).


  • EWB 3 has a new interpreter:

    The existing EWB interpreter uses an AST-walker implementation where it simply walks the abstract syntax tree nodes generated from the compiler. This is sufficient for IDE usage, but is/was woefully inadequate for server-side production usage.

    The new interpreter includes some neat new features like much better constant folding and memory safety. It is impossible for EWB code to generate an AV in the new interpreter: all array/string indexes are checked for validity, all object references are checked for validity to ensure that they are not invalid, and the interpreter can do post-mortems that will show any memory leaks in an application (memory management is still manual and deterministic).

    The new interpreter also uses a special design and instruction set that allows it to be fairly fast. For example, the following code (1 million object array initialization and iteration) executes in ~407 msecs on an i7:

    program AssignTests;
    
    type
    
       TSubObjectType = (sotNone,sotString,sotInteger);
    
       TMySubObject = class(TObject)
          private
             FSubObjectType: TSubObjectType=sotInteger;
          public
             property SubObjectType: TSubObjectType read FSubObjectType
                                                    write FSubObjectType;
          end;
    
       TMySubObjectArray = array of TMySubObject;
    
       TMyObject = class(TObject)
          private
             FName: String;
             FCount: Integer;
             FSubObjects: TMySubObjectArray;
             procedure SetName(const Value: String);
             function GetSubObject(Index: Integer): TMySubObject;
          public
             constructor Create(ACount: Integer); virtual;
             property Name: String read FName write SetName;
             property Count: Integer read FCount;
             property SubObjects[Index: Integer]: TMySubObject read GetSubObject; default;
          end;
    
    constructor TMyObject.Create(ACount: Integer);
    var
       I: Integer;
    begin
       inherited Create;
       FCount:=ACount;
       SetLength(FSubObjects,FCount);
       for I:=0 to FCount-1 do
          FSubObjects[I]:=TMySubObject.Create;
    end;
    
    procedure TMyObject.SetName(const Value: String);
    begin
       if (Value <> FName) then
          FName:=Value;
    end;
    
    function TMyObject.GetSubObject(Index: Integer): TMySubObject;
    begin
       Result:=FSubObjects[Index];
    end;
    
    var
       TempObject: TMyObject;
       TempValue1: Integer;
       TempValue2: Integer;
       I: Integer;
       TempResults: TMySubObjectArray;
       TempCount: Integer;
    begin
       TempObject:=TMyObject.Create(1000000);
       try
          TempObject.Name:='Assignment Tests';
          TempValue1:=Random(0,999999);
          TempValue2:=Random(0,999999);
          TempObject[TempValue1].SubObjectType:=sotString;
          TempObject[TempValue2].SubObjectType:=sotNone;
          SetLength(TempResults,2);
          TempCount:=0;
          for I:=0 to 999999 do
             begin
             if (TempObject[I].SubObjectType <> sotInteger) then
                begin
                TempResults[TempCount]:=TempObject[I];
                Inc(TempCount);
                end;
             end;
       finally
          TempObject.Free;
       end;
    end.

    A basic array population (1 million elements) like this takes ~172 msecs:

    program ForArray;
    
    function UserIntToStr(Value: Integer): String;
    begin
       Result:=IntToStr(Value);
    end;
    
    var
       I: Integer;
       TempStrings: array of String;
    begin
       SetLength(TempStrings,1000000);
       for I:=0 to 999999 do
          TempStrings[I]:=UserIntToStr(I);
    end.
So, things are looking good now, and I'm working very hard to get a beta out ASAP. I will keep everyone posted as things progress and the beta gets wrapped up.


Tags: Elevate Web BuilderPermanent Link13 Comments

Elevate Web Builder 2.06 Build 20 Released
Posted by Tim Young on Thu, Dec 27 2018

Elevate Web Builder 2.06 Build 20 is now available for download. If you're an existing customer, then you should be receiving an email shortly with download instructions.

The breaking changes and new features are below:

2.06 Build 20 Breaking Changes
The following are breaking changes in 2.06 Build 20:
  • Date and time columns are no longer localized at all, and are always treated as UTC values. This is due to the fact that Chrome and other browsers are starting to implement historical daylight savings time offsets, thus making it impossible to localize standalone date or time values that don't contain the relevant portion of the date/time that affects how the values are localized. Combined Date/time (timestamp) columns can still be localized according to the TDataSet LocalizeDateTimeColumns property along with the Localize date/time columns option in the dataset definition in the Database Manager.


  • The Elevate Web Builder Web Server no longer shows a user interface when installed and run as a Windows service. In conjunction with this change, the No User Interface ewbsrvr.ini setting is no longer used.
2.06 Build 20 Improvements
The following are new features and enhancements in 2.06 Build 20:
  • The TServerRequest component now includes a new CrossOriginCredentials property for specifying whether HTTP cookies and/or authentication headers are sent to non-source origins.


Tags: Elevate Web Builder, New BuildsPermanent Link0 Comments

Elevate Web Builder 2.06 Build 19 Released
Posted by Tim Young on Mon, Dec 10 2018

Elevate Web Builder 2.06 Build 19 is now available for download. If you're an existing customer, then you should be receiving an email shortly with download instructions.

This build contains several bug fixes, which are detailed here.

The breaking changes and new features are below:

2.06 Build 19 Improvements
The following are new features and enhancements in 2.06 Build 19:
  • There is a new TLabel AllowCopy property to allow end users to copy the contents of lablels.


  • External fonts are now linked in the application's HTML loader using the preload attribute so that they are downloaded and loaded before any content is displayed by the browser.


Tags: Elevate Web Builder, New BuildsPermanent Link0 Comments

Elevate Web Builder 2.06 Build 18 Released
Posted by Tim Young on Tue, Jul 24 2018

Elevate Web Builder 2.06 Build 18 is now available for download. If you're an existing customer, then you should be receiving an email shortly with download instructions.

This build contains a couple of bug fixes, which are detailed here.

Tags: Elevate Web Builder, New BuildsPermanent Link0 Comments

Elevate Web Builder 2.06 Build 17 Released
Posted by Tim Young on Mon, Jul 23 2018

Elevate Web Builder 2.06 Build 17 is now available for download. If you're an existing customer, then you should be receiving an email shortly with download instructions.

This build contains a couple of bug fixes, which are detailed here.

Tags: Elevate Web Builder, New BuildsPermanent Link0 Comments

Elevate Web Builder 2.06 Build 16 Released
Posted by Tim Young on Tue, Jul 3 2018

Elevate Web Builder 2.06 Build 16 is now available for download. If you're an existing customer, then you should be receiving an email shortly with download instructions.

This build contains a bug fix for a DBISAM database access bug, which is detailed here.

Tags: Elevate Web Builder, New BuildsPermanent Link0 Comments


Previous Entries: 1-6 7-12 13-18 19-24 25-30 31-36 37-42 43-48 49-54 55-60 61-66 67-72 73-78 79-84
Image